<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>保存this</title>
</head>

<body>
    <div id="div1">我是一个 div</div>
    <script>
        var getId = function (id) {
            return document.getElementById(id);
        };
        console.log(getId('div1'));
        // 当用 getId 来引用 document.getElementById 之后，再调用 getId，此时就成了普通函数调用，函数内部的 this 指向了 window，而不是原来的 document。
        var getId2 = document.getElementById;
        // getId2( 'div1' );

        // 我们可以尝试利用 apply 把 document 当作 this 传入 getId 函数，帮助“修正”this：
        document.getElementById = (function (func) {
            return function () {
                return func.apply(document, arguments);
            }
        })(document.getElementById);
        var getId = document.getElementById;
        var div = getId('div1');
        alert(div.id); // 输出： div1
    </script>
</body>

</html>